import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;


class Grafo
{
	//HashMap<Nodo,Nodo> hashMap;
	private Set<Arista> aristas;
	private Set<Nodo> nodos;
	private int numAristas;
	private int numNodos;
	
	public Grafo()
	{
		//hashMap = new HashMap<Nodo,Nodo>();
		aristas = new HashSet<Arista>();
		nodos = new HashSet<Nodo>();
		numAristas = 0;
		numNodos = 0;
	}
	
	public boolean addNodo(Nodo nodo) 
	{
		int RADIO = MiCanvas.RADIO * 3;
		for (Iterator<Nodo> it = dameNodos(); it.hasNext(); ) {
			Nodo n = it.next();
			if (n.equals(nodo) || 
				Math.abs(n.getX() + RADIO - nodo.getX() - RADIO) <= RADIO &&
				Math.abs(n.getY() + RADIO - nodo.getY() - RADIO) <= RADIO)
					return false;
		}
		numNodos++;
		return nodos.add(nodo);
	}
	
	public boolean addArista(Arista a)
	{
		for (Iterator<Arista> it = dameAristas(); it.hasNext(); )
			if (a.equals(it.next())) return false;
		numAristas++;
		return aristas.add(a);
	}
	
	public Iterator<Arista> dameAristas()
	{
		return aristas.iterator();
	}
	
	public Iterator<Nodo> dameNodos()
	{
		return nodos.iterator();
	}

	public Set<Arista> getAristas()
	{
		return aristas;
	}

	public void setAristas(Set<Arista> aristas)
	{
		this.aristas = aristas;
	}

	public Set<Nodo> getNodos()
	{
		return nodos;
	}

	public void setNodos(Set<Nodo> nodos)
	{
		this.nodos = nodos;
	}

	public int getNumAristas()
	{
		return numAristas;
	}

	public void setNumAristas(int numAristas)
	{
		this.numAristas = numAristas;
	}

	public int getNumNodos()
	{
		return numNodos;
	}

	public void setNumNodos(int numNodos)
	{
		this.numNodos = numNodos;
	}
	
	public boolean equals(Grafo g)
	{
		if (this.getNumNodos()!=g.getNumNodos()) return false;
		if (this.getNumAristas()!=g.getNumAristas()) return false;
		
		Iterator<Arista> itA= g.dameAristas();
		Arista a;
		Set<Arista> as = new HashSet<Arista>(aristas);
		
		boolean iguales = true;
		while (itA.hasNext() && iguales){
			a = itA.next();
			if (as.contains(a))
				as.remove(a);
			else iguales = false;			
		}
		if(!as.isEmpty())
			iguales = false;
		
		return iguales;	
	}
	
}
